<?php


namespace App\Http\Controllers\Api;


use App\Services\GroupService;
use Illuminate\Http\Request;

class GroupController extends BaseController
{

    /**
     * @api {post} api/group/store 01、创建分组
     * @apiName Store-Group
     * @apiGroup 02-Group
     * @apiVersion 1.0.0
     *
     * @apiParam {String} group_name 分组名称
     * @apiParam {String} description 分组描述
     * @apiParam {Number} [sort=50] 排序数值（升序）
     * @apiParam {Number{0,1}} [status=1] 可用状态 0:停用 1:正常
     * @apiParam {Array} [menus] 权限菜单主键数据集
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {Params} [data.other] 其他参照模块【02-02】接口响应参数
     *
     * @param Request $request
     * @param GroupService $service
     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function store(Request $request, GroupService $service) {
        return $service->store($request->post());
    }

    /**
     * @api {get} api/group/info/{id} 02、分组信息
     * @apiName Show-Group
     * @apiGroup 02-Group
     * @apiVersion 1.0.0
     *
     * @apiParam {Number} :id 分组主键【group_id】
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {Number} data.group_id 分组主键
     * @apiSuccess {String} data.group_name 分组名称
     * @apiSuccess {String} data.description 分组描述
     * @apiSuccess {Number} data.sort 排序数值（升序）
     * @apiSuccess {Number} data.status 可用状态 0:停用 1:正常
     * @apiSuccess {DateTime} data.created_at 数据创建时间
     *
     * @apiSuccess {Array} data.menus 权限菜单数据集
     * @apiSuccess {Number} data.menus.menu_id 菜单主键
     * @apiSuccess {String} data.menus.menu_name 菜单名称
     *
     * @param GroupService $service
     * @param $id
     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function show(GroupService $service, $id) {
        return $service->show($id, false);
    }

    /**
     * @api {post} api/group/update/{id} 03、更新分组
     * @apiName Update-Group
     * @apiGroup 02-Group
     * @apiVersion 1.0.0
     *
     * @apiParam {String} [group_name] 分组名称
     * @apiParam {String} [description] 分组描述
     * @apiParam {Number} [sort=50] 排序数值（升序）
     * @apiParam {Number{0,1}} [status=1] 可用状态 0:停用 1:正常
     * @apiParam {Array} [menus] 权限菜单主键数据集
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {Params} [data.other] 其他参照模块【02-02】接口响应参数
     *
     * @param Request $request
     * @param GroupService $service
     * @param $id
     * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
     * @throws \Exception
     */
    public function update(Request $request, GroupService $service, $id) {
        return $service->update($id, $request->input());
    }

    /**
     * @api {delete} api/group/destroy/{id} 04、删除分组
     * @apiName Destroy-Group
     * @apiGroup 02-Group
     * @apiVersion 1.0.0
     *
     * @apiParam {Number} :id 分组主键【group_id】
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     *
     * @param GroupService $service
     * @param $id
     * @return mixed
     * @throws \Exception
     */
    public function destroy(GroupService $service, $id) {
        return $service->destroy($id);
    }

    /**
     * @api {get} api/group/paginate 05、分组列表
     * @apiName Index-Group
     * @apiGroup 02-Group
     * @apiVersion 1.0.0
     *
     * @apiParam {String} [keyword] 根据关键字筛选【group_name|group_id】
     * @apiParam {Number} [status] 根据可用状态筛选
     * @apiParam {Number} [page=1] 设置请求页码
     * @apiParam {Number} [per_page=15] 设置每页显示数据条数
     *
     * @apiSuccess {Number} code 成功返回标识为200，其他均为失败
     * @apiSuccess {String} message 响应结果描述
     * @apiSuccess {Number} total 数据总数
     * @apiSuccess {Number} current_page 当前页码
     * @apiSuccess {Number} per_page 每页显示数据条数
     *
     * @apiSuccess {Object} data 返回数据集
     * @apiSuccess {Number} data.group_id 分组主键
     * @apiSuccess {Number} data.group_name 分组名称
     * @apiSuccess {Number} data.description 分组描述
     * @apiSuccess {Number} data.sort 排序数值（升序）
     * @apiSuccess {Number} data.status 可用状态 0:停用 1:正常
     * @apiSuccess {DateTime} data.created_at 数据创建时间
     *
     * @param Request $request
     * @param GroupService $service
     * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
     */
    public function paginate(Request $request, GroupService $service) {
        return $service->paginate($request->query());
    }
}
